package com.groupfour.attendancemanagementsystem.dao;

import com.groupfour.attendancemanagementsystem.entity.DTO.*;
import com.groupfour.attendancemanagementsystem.entity.VO.CheckStudentVO;
import com.groupfour.attendancemanagementsystem.entity.VO.CourseVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;
import java.util.List;

/**
 * @Entity com.groupfour.attendancemanagementsystem.entity.DO.CourseDO
 */
@Mapper
public interface CourseDao{
    /**
    * @author： xin
    * @param： null
    * @return： List<String>
    * @exception: none
    * @describe： 查询所有课程名返回给搜索下拉框
    */
    List<String> findCourseNameByFormClick();
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询所有实训老师返回给搜索下拉框
     */
    List<TeacherInfoDTO> findTrainTeacherByFormClick();
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询所有责任老师返回给搜索下拉框
     */
    List<TeacherInfoDTO> findDutyTeacherByFormClick();
    /**
    * @author： xin
    * @param： teacherCode
    * @return： List<String>
    * @exception: none
    * @describe： 根据老师编号查询老师姓名
    */
    List<String> findTeacherNameByTeacherCode(List<String> teacherCode);

    List<String> findTrainTeacherByCourseCode(String courseCode);

    Integer updateCourseDeleteStatus(String courseCode);

    String findDutyTeacherByCourseCode(String courseCode);
    /**
     * @author： xin
     * @param： courseDTO
     * @return： List<CourseVO>
     * @exception: none
     * @describe： 按照表单提交进行查询
     */
    List<CourseVO> findCourseByCourseDTO(CourseDTO courseDTO);
    /**
    * @author： xin
    * @param： page pageSize
    * @return： List<CourseVO>
    * @exception: none
    * @describe： 查询所有课程
    */
    List<CourseVO> findAllCourse();
    /**
    * @author： xin
    * @param： none
    * @return： string
    * @exception: null
    * @describe： 查询课程名称是否存在
    */
    String findCourseName(String courseName);
    /**
    * @author： xin
    * @param： projectCourseDTO
    * @return： Integer
    * @exception: none
    * @describe： 添加课程名称
    */
    Integer addProjectCourse(String projectCourseName);
    /**
     * @author： xin
     * @param： courseDTOByAdd
     * @return： Integer
     * @exception: none
     * @describe： 新增课程
     */
    Integer addCourse(CourseDTOByAdd courseDTOByAdd);

    List<String> findTrainTeacherCode(List<String> trainTeacherNames);

    String findDutyTeacherCode(String teacherName);

    Integer addTrainTeacher(String teacherCode,String courseCode);

    Integer addDutyTeacher(String teacherCode,String courseCode);
    /**
     * @author： xin
     * @param： courseDTOByUpdate
     * @return： Integer
     * @exception: none
     * @describe： 修改课程
     */
    Integer updateCourse(CourseDTOByUpdate courseDTOByUpdate,String courseCode);

    Integer updateTrainTeacher(String teacherCode,String courseCode);

    Integer updateDutyTeacher(String teacherCode, String courseCode,Date updateTime);
    /**
    * @author： xin
    * @param： key
    * @return： List
    * @exception: none
    * @describe： 查询分组名称
    */
    List<GroupInfoDTO> findGroupNames();
    /**
    * @author： xin
    * @param： courseName
    * @return： String
    * @exception: none
    * @describe： 查询课程编号
    */
    String findGroupCode(String courseName);
    /**
    * @author： xin
    * @param：
    * @return：
    * @exception:
    * @describe：
    */
    List<String> findStudentCodeByGroupCode(String groupCode);
    /**
    * @author： xin
    * @param：
    * @return：
    * @exception:
    * @describe：
    */
    List<StudentInfoDTO> findStudentNameByCode(List<String> item);

   //List<String> findStudentCodeByStudentName(List<String> studentNames);
    /**
    * @author： xin
    * @param： addStudentInCourseDTO
    * @return： int
    * @exception:  none
    * @describe：  添加学生需要上的课
    */
    int addStudentInCourse(StudentInCourseDTO studentInCourseDTO);
    /**
    * @author： xin
    * @param： studentCode
    * @return： List<String>
    * @exception: none
    * @describe： 根据学生编号查询课程编号
    */
    List<String> findCourseCodeByStudentCode(String studentCode);
    /**
    * @author： xin
    * @param： courseCode
    * @return： CourseVO
    * @exception: none
    * @describe： 根据课程编号查询老师或同学的课程
    */
    CourseVO findAllStudentAndTeacherCourse(String courseCode);
    /**
    * @author： xin
    * @param： courseDTO，courseCode
    * @return： CourseVO
    * @exception: none
    * @describe： 根据表单DTO查找课程
    */
    List<CourseVO> findStudentAndTeacherCourseByCourseDTO(CourseDTO courseDTO,List<String> courseCode);
    /**
    * @author： xin
    * @param： teacherCode
    * @return： String
    * @exception:  none
    * @describe： 根据教师编号查询课程编号
    */
    List<String> findCourseCodeByTeacherCode(String teacherCode);
    /**
    * @author： xin
    * @param： null
    * @return： List<String>
    * @exception: none
    * @describe： 查询项目组名称
    */
    List<String> findAllGroupName();
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询专业名称
     */
    List<String> findAllMajor();
    /**
     * @author： xin
     * @param： null
     * @return： List<String>
     * @exception: none
     * @describe： 查询班级名称
     */
    List<String> findAllClasses();
    /**
     * @author： xin
     * @param： courseCode
     * @return： List<String>
     * @exception: none
     * @describe： 根据课程编号查询学生编号
     */
    List<String> findStudentCodeByCourseCode(String courseCode);
    /**
    * @author： xin
    * @param： courseCode,checkStudentDTO
    * @return： List<CheckStudentVO>
    * @exception: none
    * @describe： 根据表单DTO和课程code查询教师所教课程的学生
    */
    List<CheckStudentVO> findThisCourseStudent(String courseCode,CheckStudentDTO checkStudentDTO);
}




